<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /* 
             大部分的情况下,我们是不需要修改原型对象
                注意:
                    前往不要通过类的实例去修改原型
                        1.通过一个对象影响所有同类对象,这么做不合适
                        2.修改原型先得创造实例,麻烦
                        3.危险

            除了通过__proto__能访问对象的原型外,
                还可以通过类的prototype属性,来访问实力的原型
                修改原型的时候,最好通过类去修改
                    好处:
                        1.一修改就是修改所有实例的原型
                        2.无需创建实例即可完成对类的修改
                    
                    原则:
                        1.原型尽量不要手动改
                        2.要改也不要通过实例对象去修改
                        3.通过类.prototype 属性去修改
                        4.最好不要直接给prototype去赋值(比如prototype.方法)
        */
            class Person {
                name = "GG"
                constructor (){
                    console.log("GGGGGG");
                }
                sayHello(){
                    console.log("Hello");
                }
            }
            const p1 = new Person()
            const p2 = new Person()
            // 不要在原型中添加方法!修改以后,所有同类实例都能访问该方法
            p1.__proto__.say = () => {
                console.log("DDDDD");
            }
            // p.__proto__ = new Dog() 直接给对象赋值了一个新的原型,不要这么做!
            p1.say()
            p2.say()
            Person.prototype.fly = () => {
                console.log("GSDSD");
            }
            p1.fly()
            p2.fly()
    </script>
</head>
<body>
    
</body>
</html>